<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="text" encoding="UTF-8"/>
    
    <xsl:key name="inputCurrencyID" match="report/exchanges/exchange/input_currency" use="."/>
    <xsl:key name="outputCurrencyID" match="report/exchanges/exchange/output_currency" use="."/>
    
    <xsl:template match="/">
        <xsl:text>Modern Content Management Technologies
        </xsl:text>
    	
    	<xsl:text>&#10;        Authors: &#10;</xsl:text>
    	<xsl:apply-templates select="report/info/authors/author" />
    	<xsl:text>&#10;</xsl:text>   
    	
        <xsl:text>&#10;List of Exchanges: &#10;</xsl:text>
        <xsl:apply-templates select="report/exchanges/exchange" /> 
        <xsl:text>&#10;Statistics: &#10;</xsl:text>
        <xsl:call-template name="count_exchanges" />
        <xsl:call-template name="input_currency_stats" />
        <xsl:call-template name="output_currency_stats" />
    </xsl:template>
    
    <xsl:template match="info/authors/author">
    	<xsl:text>            </xsl:text>
        <xsl:value-of select="name" />
        <xsl:text> - </xsl:text>
        <xsl:value-of select="index_number" />
        <xsl:text> - </xsl:text>
        <xsl:value-of select="department" />
        <xsl:text>&#10;</xsl:text>       
    </xsl:template>
    
    <xsl:template match="report/exchanges/exchange">
        <xsl:text>Input Value: </xsl:text>
        <xsl:value-of select="input_value" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Input Currency: </xsl:text>
        <xsl:value-of select="input_currency" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Output Value: </xsl:text>
        <xsl:value-of select="output_value" />  
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Output Currency: </xsl:text>
        <xsl:value-of select="output_currency" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Rate: </xsl:text>
        <xsl:value-of select="rate" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Title: </xsl:text>
        <xsl:value-of select="title" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Link: </xsl:text>
        <xsl:value-of select="link" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Region: </xsl:text>  
        <xsl:value-of select="region" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Published date: </xsl:text>
        <xsl:value-of select="pubdate" />
        <xsl:text>&#10;</xsl:text>
        <xsl:text>Description: </xsl:text>  
        <xsl:value-of select="description" />
        <xsl:call-template name="space-generator">
            <xsl:with-param name="length" select="30 - string-length(title)"/>
        </xsl:call-template>    
        <xsl:text>&#10;</xsl:text>
        <xsl:text>&#10;</xsl:text>
        <xsl:text>&#10;</xsl:text>     
    </xsl:template>
    
    <xsl:template name="space-generator">
        <xsl:param name="length" select="0"/>
        <xsl:if test="$length != 0">
            <xsl:value-of select="'&#32;'"/>
            <xsl:call-template name="space-generator">
                <xsl:with-param name="length" select="$length - 1"/>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    
    <xsl:template name="input_currency_stats">
        <xsl:text>&#10;Input Currency in percentages: &#10;</xsl:text>
            <xsl:for-each select="report/exchanges//input_currency[generate-id() = generate-id(key('inputCurrencyID',.)[1])]">
                <xsl:sort select="count(key('inputCurrencyID',.))" order="descending"/>
                    
        <xsl:value-of select="." />
        <xsl:text> - </xsl:text> 
                    <xsl:value-of select="round((count(key('inputCurrencyID',.))  div (count(//exchange)) * 100))" />
        <xsl:text>&#10;</xsl:text>         
            </xsl:for-each>
        <xsl:text>&#10;</xsl:text>
    </xsl:template>

    <xsl:template name="output_currency_stats">
        <xsl:text>&#10;Output Currency in percentages: &#10;</xsl:text>
            <xsl:for-each select="report/exchanges//output_currency[generate-id() = generate-id(key('outputCurrencyID',.)[1])]">
                <xsl:sort select="count(key('outputCurrencyID',.))" order="descending"/>
        <xsl:value-of select="." />
        <xsl:text> - </xsl:text>
                    <xsl:value-of select="round((count(key('outputCurrencyID',.))  div (count(//exchange)) * 100))" />
        <xsl:text>&#10;</xsl:text>         
            </xsl:for-each>
        <xsl:text>&#10;</xsl:text>
    </xsl:template>
    
    <xsl:template name="count_exchanges">
        <xsl:text>&#10;Total number of performed exchanges: &#10;</xsl:text>
            <xsl:value-of select="count(//exchange)" />
        <xsl:text>&#10;&#10;</xsl:text>
    </xsl:template>
    
</xsl:stylesheet>